package com.haixiaoke.saas.repository.service;

import com.haixiaoke.saas.repository.pojo.UserFloatingPopulationRecord;
import com.haixiaoke.saas.repository.vo.UserFloatingPopulationRecordVo;

import java.util.List;
import java.util.Map;

/**
 * 流动用户记录Service接口
 *
 * @author qixi
 * @date 2023-07-25
 */
public interface IUserFloatingPopulationRecordService {
    /**
     * 查询流动用户记录
     *
     * @param id 流动用户记录主键
     * @return 流动用户记录
     */
    UserFloatingPopulationRecord selectUserFloatingPopulationRecordById(Long id);

    /**
     * 查询流动用户记录列表
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 流动用户记录集合
     */
    List<UserFloatingPopulationRecord> selectUserFloatingPopulationRecordList(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 查询流动用户记录列表
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 流动用户记录集合
     */
    List<UserFloatingPopulationRecordVo> selectUserFloatingPopulationRecordAndHouseInfoList(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 查询流动用户记录列表
     *
     * @return 流动用户记录集合
     */
    List<UserFloatingPopulationRecordVo> selectUserFloatingPopulationRecordAndHouseInfoListByPopulationIds(UserFloatingPopulationRecordVo vo);

    /**
     * 新增流动用户记录
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 结果
     */
    int insertUserFloatingPopulationRecord(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 修改流动用户记录
     *
     * @param userFloatingPopulationRecord 流动用户记录
     * @return 结果
     */
    int updateUserFloatingPopulationRecord(UserFloatingPopulationRecord userFloatingPopulationRecord);

    /**
     * 批量删除流动用户记录
     *
     * @param ids 需要删除的流动用户记录主键集合
     * @return 结果
     */
    int deleteUserFloatingPopulationRecordByIds(Long[] ids);

    /**
     * 删除流动用户记录信息
     *
     * @param id 流动用户记录主键
     * @return 结果
     */
    int deleteUserFloatingPopulationRecordById(Long id);

    /**
     * 本日人员统计
     */
    UserFloatingPopulationRecord todayPersonnel(Long orgId, String residenceCommunityId, List<String> communityIds);

    /**
     * 每周人员类型数据统计
     */
    UserFloatingPopulationRecord weeklyPersonnel(Long orgId, String communityId, Integer weeklyNumber, List<String> communityIds);

    /**
     * 获取当前月有多少周
     */
    List<Map<String, Object>> getWeekNumber();


    /**
     * 月度人员数据统计
     */
    UserFloatingPopulationRecord monthPersonnel(Long orgId, String residenceCommunityId, Integer month, List<String> communityIds);

    /**
     * 季度人员数据统计
     */
    UserFloatingPopulationRecord quarterPersonnel(Long orgId, String residenceCommunityId, Integer quarter, List<String> communityIds);

    /**
     * 年度人员数据统计
     */
    UserFloatingPopulationRecord yearPersonnel(Long orgId, String residenceCommunityId, Integer year,   List<String> communityIds );

    /**
     * 总人员数据统计
     */
    UserFloatingPopulationRecord personnelInfo(Long orgId, String residenceCommunityId, List<String> communityIds);

    UserFloatingPopulationRecord selectUserFloatingPopulationRecordByhouseUserId(Long houseUserId);
}
